package com.ecommerce.order.service;

import com.ecommerce.order.dto.OrderCreateRequest;
import com.ecommerce.order.dto.OrderPageResponse;
import com.ecommerce.order.dto.OrderResponse;
import com.ecommerce.order.dto.OrderUpdateStatusRequest;

/**
 * 订单服务接口
 */
public interface OrderService {

    /**
     * 创建订单
     * @param createRequest 创建请求
     * @param userId 用户ID
     * @param username 用户名
     * @return 订单响应
     */
    OrderResponse createOrder(OrderCreateRequest createRequest, Long userId, String username);

    /**
     * 获取订单详情
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 订单响应
     */
    OrderResponse getOrderById(Long orderId, Long userId);

    /**
     * 根据订单编号获取订单详情
     * @param orderNo 订单编号
     * @param userId 用户ID
     * @return 订单响应
     */
    OrderResponse getByOrderNo(String orderNo, Long userId);

    /**
     * 分页获取用户订单列表
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页大小
     * @return 订单分页响应
     */
    OrderPageResponse getOrdersByUserId(Long userId, Integer page, Integer size);

    /**
     * 根据状态获取用户订单列表
     * @param userId 用户ID
     * @param status 订单状态
     * @return 订单响应列表
     */
    OrderPageResponse getOrdersByUserIdAndStatus(Long userId, Integer status, Integer page, Integer size);

    /**
     * 更新订单状态
     * @param orderId 订单ID
     * @param updateRequest 更新请求
     * @param userId 用户ID
     * @return 订单响应
     */
    OrderResponse updateOrderStatus(Long orderId, OrderUpdateStatusRequest updateRequest, Long userId);

    /**
     * 取消订单
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 订单响应
     */
    OrderResponse cancelOrder(Long orderId, Long userId);

    /**
     * 删除订单
     * @param orderId 订单ID
     * @param userId 用户ID
     */
    void deleteOrder(Long orderId, Long userId);

    /**
     * 支付订单
     * @param orderId 订单ID
     * @param paymentMethod 支付方式
     * @param userId 用户ID
     * @return 订单响应
     */
    OrderResponse payOrder(Long orderId, Integer paymentMethod, Long userId);
}